import { joinTimestamp } from '@/utils/http/axios/helper';

/**
 * 将对象添加当作参数拼接到URL上面
 * @param baseUrl 需要拼接的url
 * @param obj 参数对象
 * @returns {string} 拼接后的对象
 * 例子:
 *  let obj = {a: '3', b: '4'}
 *  setObjToUrlParams('www.baidu.com', obj)
 *  ==>www.baidu.com?a=3&b=4
 */
export function setObjToUrlParams(baseUrl: string, obj: object): string {
  let parameters = '';
  let url = '';
  for (const key in obj) {
    parameters += key + '=' + encodeURIComponent(obj[key]) + '&';
  }
  parameters = parameters.replace(/&$/, '');
  if (/\?$/.test(baseUrl)) {
    url = baseUrl + parameters;
  } else {
    url = baseUrl.replace(/\/?$/, '?') + parameters;
  }
  return url;
}

export function addTimestampUrl(baseUrl: string) {
  return setObjToUrlParams(baseUrl, joinTimestamp(true, false));
}

/**
 * 根据浏览器地址替换URL字符串协议
 * @param urlString 需要替换的url
 */

export function setDefaultProtocol(urlString: string) {
  try {
    const defaultProtocpl = window.location.protocol;
    const url = new URL(urlString);
    url.protocol = defaultProtocpl;
    return url.toString();
  } catch (error) {
    return urlString;
  }
}

/**
 * 调整URL的协议
 *
 * @param url 待调整的URL
 * @returns 返回调整后的URL
 */
export function adjustUrlProtocol(url: string): string {
  // 获取当前页面的协议（不包含末尾的冒号）
  const currentProtocol = window.location.protocol.slice(0, -1);

  // 检查URL是否已经是完整的，即以http或https开头
  if (/^(https?:)\/\//.test(url)) {
    // 如果URL已经包含协议，检查它是否与当前页面的协议相同
    const existingProtocol = url.match(/^(https?)/)![0];
    if (existingProtocol !== currentProtocol) {
      // 如果协议不匹配，则替换为当前页面的协议
      return url.replace(/^(https?)/, currentProtocol);
    }
    // 如果协议匹配，则不做任何更改
    return url;
  } else {
    //
    return url;
  }
}
